﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using OpenSource.UPnP;
using System.Xml;
using System.Windows.Markup;
using System.IO;
using System.Reflection;
using System.Threading;
using System.Windows.Threading;
using System.Runtime.CompilerServices;
using System.Collections;


namespace DispositifAffichage
{

    public class ServeurDispositifAffichage
    {
        private UPnPDevice root;
        private UPnPService list;


        static ArrayList _zonesresultatFinal = new ArrayList();
        static int counter=0;
        static double widht1;
        static double height1;


        MainWindow mainwindow;

       
        /**
        * \startUPnP       ZonesresultatFinal contient le resultat final.

       

        /**
            * \UPnPSurfaceServeur      le constructeur du classe 'UPnPSurfaceServeur'

        */
        public ServeurDispositifAffichage(MainWindow mainw)
        {
            mainwindow = mainw; 
            string s = "";
            root = UPnPDevice.CreateRootDevice(360, 1.0, "");
            root.FriendlyName = "DispositifAffichage1";
            root.DeviceURN = "urn:schemas-upnp-org:device:DispositifAffichage1:1";
            root.HasPresentation = false;
            root.Manufacturer = "sbai";
            root.ModelName = "UPnP sample for kids";
            root.UniqueDeviceName = "12345678-153f-430d-82f3-dff320c17501";

            list = new UPnPService(1.0, "Sample", "urn:schemas-upnp-org:service:Sample:1", true, this);
            list.AddStateVariable(new UPnPStateVariable("Text", s));


            list.AddMethod("loadFile");
            list.AddMethod("recupereParametreInterface");

            root.AddService(list);
            root.Advertise();
        }



        /**
        * \startUPnP       pour démarrer le device

        */
        public void startUPnP()
        {
            root.StartDevice();
            Console.WriteLine("Serveur start");
        }

        /**
        * \stopUPnP       pour arrêter le device
        */
        public void stopUPnP()
        {
            root.StopDevice();
            Console.WriteLine("Serveur stopped");

        }


        /**
        * \loadFile       pour télécharger le fichier de description
        * \param         InFile est le fichier de descrption passé sous forme d'une chaîne de caractères
        */
        public void loadFile(string InFile, string name)
        {
            Console.WriteLine("le nom est : "+name);
            Console.WriteLine("file received: \n" + InFile);


            if (InFile == "") {

                Console.WriteLine("fichier de description reçu est vide");
            }
            else
            {
                ///commande=namespace qui existe dans le fichier de description xaml
                string commande = InFile.Substring(InFile.IndexOf("x:Class"), InFile.IndexOf("  "));

                Console.WriteLine("la commande à afficher est: \n" + commande);

                ///j'ai supprimé le namespace
                InFile = InFile.Replace(commande, "");

                // mainwindow.chargement_UI(InFile);


                mainwindow.updateinterface(InFile, name);
            }
                      
        }


        public string recupereParametreInterface(double s4,double s5) {

            Console.WriteLine(s4);
            Console.WriteLine(s5);
            counter++;
            double m1 = Convert.ToDouble(s4);
            double m2 = Convert.ToDouble(s5);
            Console.WriteLine(m1);
            Console.WriteLine(m2);
            string resultat="";

            if (counter == 1) { 
       if(m1<2200 && m2 <1400){

          widht1 = m1;
        height1 = m2;
            resultat = "True, je peux afficher votre interface";
        }

        else{resultat="False, je ne peux pas afficher votre interface";}

        }
       else if (counter == 2) {

                if (widht1 < 2200 - widht1 & m2 < 1400)
                {

                    resultat = "True";
                }
                else { resultat = "False"; }
            }
            Console.WriteLine("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
            Console.WriteLine("Resultat est "+resultat);
            return resultat;
        }
        

     
    }
}
